package modele;

import javax.swing.event.EventListenerList;

import modele.TrainAterrissage.Etat;
import modele.listener.*;

public class Portes extends ObservableGenerique<PorteListener> {
	
	/**
	 * Etat logique, rien a voir avec l'interface graphique.
	 */
	public enum Etat{
		OUVERTES, FERMEES, TRANSITIONUP, TRANSITIONDOWN
	}
	
	
	private Etat etat;
	
	public Etat getEtat(){
		return this.etat;
	}
	
	public Portes() {
		super();
		etat = Etat.FERMEES;
	}
	
	public boolean isEnTransition(){
		if(isUp() || isDown())
			return true;
		else
			return false;
	}
	
	/**
	 * Met en mouvement.
	 */
	public void switcher(){
		switch(this.etat){
			case FERMEES:
				this.etat=Etat.TRANSITIONDOWN;
				break;
			case OUVERTES:
				this.etat=Etat.TRANSITIONUP;
				break;
			case TRANSITIONDOWN:
				this.etat=Etat.TRANSITIONUP;
				break;
			case TRANSITIONUP:
				this.etat=Etat.TRANSITIONDOWN;
				break;
		}
		fireModeleChanged();
	}
	
	/**
	 * Finalise un mouvement.
	 */
	public void finish(){
		if(this.etat == Etat.TRANSITIONDOWN){
			setOuvertes();
		}
		else if(this.etat == Etat.TRANSITIONUP){
			setFermees();
		}
	}
	
	public boolean isFermees(){
		if(this.etat == Etat.FERMEES){
			return true;
		}
		else return false;
	}
	public boolean isOuvertes(){
		if(this.etat == Etat.OUVERTES){
			return true;
		}
		else return false;
	}
	public boolean isDown(){
		if(this.etat == Etat.TRANSITIONDOWN){
			return true;
		}
		else return false;
	}
	public boolean isUp(){
		if(this.etat == Etat.TRANSITIONUP){
			return true;
		}
		else return false;
	}
	
	public void setOuvertes(){
		etat = Etat.OUVERTES;
		fireModeleChanged();
	}
	public void setFermees(){
		etat = Etat.FERMEES;
		fireModeleChanged();
	}
	
	
	
	
	/*
	 * Pour les listeners
	 */

	@Override
	public void fireModeleChanged() {
		for(PorteListener listener : listenersListe){
			listener.etatPortesChanged(new PortesChangedEvent(this, this.etat));
		}
	}
}
